草庐IT

c++ - QML Qt openUrlExternally

全部标签

c++ - 垃圾收集 C 会比 C++ 更快吗?

很长一段时间以来,我一直在思考如何在我的下一个项目中管理内存。这是用C/C++编写DSL。这三种方式都可以。引用计数C或C++。收集垃圾C.在C++中,将类和结构从一个堆栈复制到另一个堆栈,并使用某种GC单独管理字符串。社区可能已经对这些方法中的每一种都有很多经验。哪个会更快?各自的优缺点是什么?一个相关的问题。malloc/free会比在程序开头分配一大块并在其上运行我自己的内存管理器慢吗?.NET似乎可以做到。但我很困惑,为什么我们不能指望操作系统比我们自己做的更好更快地完成这项工作。 最佳答案 这一切都取决于!这是一个非常开放

c++ - 编译器编程 : What are the most fundamental ingredients?

我有兴趣编写一个非常简约的编译器。我想编写一个满足以下条件的小软件(用C/C++):以ELF格式输出(*nix)输入是一个文本文件类C语法和句法没有链接器没有预处理器非常小(最多1-2KLOC)语言特点:原生数据类型:char、int和float数组(适用于所有native数据类型)变量控制结构(if-else)职能循环(会很好)简单的代数(div、add、sub、mul、bool表达式、位移等)内联汇编(用于系统调用)谁能告诉我如何开始?我不知道编译器由哪些部分组成(至少在我可以立即开始的意义上)以及如何对它们进行编程。谢谢你的想法。 最佳答案

c++ - C 和 C++ : Freeing PART of an allocated pointer

假设我分配了一个指针来保存4096字节。如何在C语言中释放最后1024个字节?在C++中呢?相反,如果我想取消分配第一个1024个字节,并保留其余部分(在两种语言中)怎么办?从中间释放怎么样(在我看来,这需要将它分成两个指针,在释放区域之前和之后)。 最佳答案 不要尝试猜测内存管理。它通常比你聪明;-)您唯一可以实现的是第一个场景“解除分配”最后的1Kchar*foo=malloc(4096);foo=realloc(foo,4096-1024);但是,即使在这种情况下,也不能保证“foo”会保持不变。您的整个4K可能会被释放,并且

c++ - 将任何类型的文件转换为带有 c 字符串的文件

请推荐一个小型命令行实用程序(适用于Windows)以将文件从特定目录转换为有效的c文件。也许只用批处理命令就可以完成?生成的文件应如下所示:staticconstunsignedcharsome_file[]={/*some_file.html*/0x2f,0x70,0x72,0x6f,0x63,0x65,0x73,0x73,0x65,0x73,0x2e,0x73,0x68,0x74,0x6d,0x6c,0,0x25,0x21,0x3a,0x20,0x2f,0x68,0x65,0x61,0x64,0x65}staticconstunsignedcharsome_other_file[

c++ - #ifndef FILENAME....#endif 在头文件中的用途

我知道它是为了防止多次包含头文件。但是假设我确保只将此文件包含在一个.cpp文件中一次。是否还有我需要这种保护措施的情况? 最佳答案 不,这是include守卫的唯一目的,但使用它们应该是一个明智的选择:这样做需要很少的时间并且可能节省很多。 关于c++-#ifndefFILENAME....#endif在头文件中的用途,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/219818

c++ - C/C++ 中的 CreateObject 等价物? (COM 互操作)

C/C++中的等价物是什么? 最佳答案 这是CoCreateInstance()功能。ItisconvenienttouseCoCreateInstancewhenyouneedtocreateonlyasingleinstanceofanobjectonthelocalmachine.Ifyouarecreatinganinstanceonremotecomputer,callCoCreateInstanceEx.Whenyouarecreatingmultipleinstances,itismoreefficienttoobta

c++ - C 中的运算符重载

在C++中,我可以通过执行以下操作来更改特定类的运算符:MyClass::operator==/*Orsomeotheroperatorsuchas=,>,etc.*/(ConstMyClassrhs){/*DoStuff*/;}但是在C中没有类(默认情况下内置)。那么,我如何才能仅对一般函数进行运算符重载?例如,如果我没记错的话,导入stdlib.h会为您提供->运算符,它只是(*strcut_name).struct_element的语法糖。那么我如何在C中执行此操作?谢谢。 最佳答案 普通的旧C没有任何形式的运算符重载。->访

c++ - 冲突的枚举

如果两个不同的库定义相同的枚举并且我需要在同一个项目中使用这两个库会怎样?枚举月份{January=0,February,...,December}谢谢。附言它是C。没有命名空间。我不能让他们分开。需要一些解决方法。什么是枚举链接?内部还是外部?C++项目中使用的C库。C++标签适用。 最佳答案 ClibsusedinC++project.C++tagapplies由于它们在C++项目中使用,因此在将它们包含在C++代码中时可以使用命名空间,如下所示://Cfiles//libone.henumMonth{January=0,Feb

c++ - 函数指针 typedef 的语法是什么?

我正在开发一个线程池,为了避免使用长限定符名称,我想使用typedef声明。但它并不像看起来那么容易:typedefunsigned(__stdcall*start_address)(void*)task;当我这样尝试时,我得到了:errorC3646:'task':unknownoverridespecifier错误,在玩了一会儿这个声明之后我被卡住了,找不到任何合理的解决方案来声明这种类型的typedef。 最佳答案 为函数指针创建typedef别名时,别名在函数name位置,所以使用:typedefunsigned(__std

c++ - C - 打印浮点值

我有一个C++程序,它接收值并像这样打印出值:getline(in,number);cout我有一个等效的C程序,它接收值并像这样打印出来:fscanf(rhs,"%e",&number);printf("%lf\n",number);但是当C++程序打印出0.30951时,C程序打印出0.309510。更多示例:C++:0.0956439C:0.095644。只要值是7位长,它似乎打印相同的结果,但如果它比7位短,它会在末尾添加一个额外的0。如果它的长度超过7位,则向下舍入为6位。我希望C结果与C++程序匹配。任何帮助将不胜感激。谢谢。注意:数字是一个float,数字是从文件中读取的